home *** CD-ROM | disk | FTP | other *** search
/ Delphi Magazine Collection 2001 / Delphi Magazine Collection 20001 (2001).iso / DISKS / ISSUE05 / EDSSPELL / EDSSPELL.ZIP / TSTMAIN.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1995-11-30  |  6.0 KB  |  237 lines

  1. { This demo shows how to use the TOpenDialog,
  2.   TSaveDialog, TFindDialog and TReplaceDialog
  3.   components along with the LoadFromFile and
  4.   SaveToFile methods of a TStringList (in this
  5.   case the string list in Memo1). }
  6.  
  7. unit TstMain;
  8.  
  9. interface
  10.  
  11. uses WinTypes, WinProcs, Classes, Graphics, Controls, Menus,
  12.   Forms, StdCtrls, Dialogs, ExtCtrls, EDSSpell, MemoUtil;
  13.  
  14. type
  15.   TForm1 = class(TForm)
  16.     MainMenu1: TMainMenu;
  17.     File1: TMenuItem;
  18.     Memo1: TMemo;
  19.     OpenDialog1: TOpenDialog;
  20.     SaveDialog1: TSaveDialog;
  21.     FindDialog1: TFindDialog;
  22.     Search1: TMenuItem;
  23.     Find1: TMenuItem;
  24.     Replace1: TMenuItem;
  25.     FindNext1: TMenuItem;
  26.     ReplaceDialog1: TReplaceDialog;
  27.     SpellDlg1: TSpellDlg;
  28.     Actions1: TMenuItem;
  29.     SpellCheck1: TMenuItem;
  30.     Panel1: TPanel;
  31.     procedure New1Click(Sender: TObject);
  32.     procedure FileOpenClick(Sender: TObject);
  33.     procedure Save1Click(Sender: TObject);
  34.     procedure SaveAs1Click(Sender: TObject);
  35.     procedure FileExitClick(Sender: TObject);
  36.     procedure Find1Click(Sender: TObject);
  37.     procedure Find(Sender : TObject);
  38.     procedure FindNext1Click(Sender: TObject);
  39.     procedure Replace1Click(Sender: TObject);
  40.     procedure Replace(Sender: TObject);
  41.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  42.     procedure SpellCheck1Click(Sender: TObject);
  43.     procedure UpdateXY;
  44.     procedure Memo1Change(Sender: TObject);
  45.     procedure Memo1Click(Sender: TObject);
  46.     procedure Memo1KeyUp(Sender: TObject; var Key: Word;
  47.       Shift: TShiftState);
  48.     procedure Memo1MouseUp(Sender: TObject; Button: TMouseButton;
  49.       Shift: TShiftState; X, Y: Integer);
  50.   end;
  51.  
  52. var
  53.   Form1: TForm1;
  54.  
  55. implementation
  56.  
  57. uses SysUtils, Search;
  58.  
  59. {$R *.DFM}
  60.  
  61. procedure TForm1.New1Click(Sender: TObject);
  62. begin
  63.   Memo1.Clear;
  64.   OpenDialog1.Filename := '';
  65.   Caption := 'Text Demo - [Untitled]';
  66. end;
  67.  
  68. procedure TForm1.FileOpenClick(Sender: TObject);
  69. var
  70.   Buffer:     pChar;
  71.   BufferSize: Longint;
  72.   f:          file;
  73. begin
  74.   with OpenDialog1 do
  75.     if Execute then
  76.     begin
  77.       Memo1.Lines.LoadFromFile(FileName);
  78.       try
  79.         BufferSize := Memo1.GetTextLen + 1;
  80.         GetMem (Buffer, BufferSize);
  81.         if Memo1.GetTextBuf (Buffer, BufferSize)<>BufferSize-1 then
  82.           MessageDlg ('Error Allocating Buffer...', mtError, [mbOk], 0);
  83.         OemToAnsiBuff (Buffer, Buffer, BufferSize);
  84.         Memo1.SetTextBuf (Buffer);
  85.       finally
  86.         FreeMem (Buffer, BufferSize);
  87.       end;  { try }
  88.       Caption := 'Text Demo - ' + ExtractFilename(FileName);
  89.     end;
  90. end;
  91.  
  92. procedure TForm1.Save1Click(Sender: TObject);
  93. var
  94.   Buffer:     PChar;
  95.   BufferSize: Longint;
  96. begin
  97.   if OpenDialog1.Filename <> '' then
  98.   begin
  99.     try
  100.       BufferSize := Memo1.GetTextLen + 1;
  101.       GetMem (Buffer, BufferSize);
  102.       if Memo1.GetTextBuf (Buffer, BufferSize)<>BufferSize-1 then
  103.         MessageDlg ('Error Allocating Buffer...', mtError, [mbOk], 0);
  104.  
  105.       AnsiToOemBuff (Buffer, Buffer, BufferSize);
  106.       Memo1.SetTextBuf (Buffer);
  107.       Memo1.Lines.SaveToFile(OpenDialog1.Filename);
  108.       Memo1.Modified := False;
  109.       OemToAnsiBuff (Buffer, Buffer, BufferSize);
  110.       Memo1.SetTextBuf (Buffer);
  111.     finally
  112.       FreeMem (Buffer, BufferSize);
  113.     end;  { try }
  114.   end
  115.     else SaveAs1Click(Sender);
  116. end;
  117.  
  118. procedure TForm1.SaveAs1Click(Sender: TObject);
  119. begin
  120.   with SaveDialog1 do
  121.     if Execute then
  122.     begin
  123.       Memo1.Lines.SaveToFile(Filename);
  124.       Caption := 'Text Demo - ' + ExtractFilename(FileName);
  125.       OpenDialog1.Filename := Filename;
  126.     end;
  127. end;
  128.  
  129. procedure TForm1.Find1Click(Sender: TObject);
  130. begin
  131.   FindDialog1.Execute;
  132.   FindNext1.Enabled := True;
  133. end;
  134.  
  135. procedure TForm1.Find(Sender: TObject);
  136. begin
  137.   with Sender as TFindDialog do
  138.     if not SearchMemo(Memo1, FindText, Options) then
  139.       ShowMessage('Cannot find "' + FindText + '".');
  140. end;
  141.  
  142. procedure TForm1.Replace1Click(Sender: TObject);
  143. begin
  144.   ReplaceDialog1.Execute;
  145. end;
  146.  
  147. procedure TForm1.FindNext1Click(Sender: TObject);
  148. begin
  149.   Find(FindDialog1);
  150. end;
  151.  
  152. { Replace and ReplaceAll call this routine. }
  153. procedure TForm1.Replace(Sender: TObject);
  154. var
  155.   Found: Boolean;
  156. begin
  157.   with ReplaceDialog1 do
  158.   begin
  159.     if AnsiCompareText(Memo1.SelText, FindText) = 0 then
  160.       Memo1.SelText := ReplaceText;
  161.     Found := SearchMemo(Memo1, FindText, Options);
  162.     while Found and (frReplaceAll in Options) do
  163.     begin
  164.       Memo1.SelText := ReplaceText;
  165.       Found := SearchMemo(Memo1, FindText, Options);
  166.     end;
  167.     if (not Found) and (frReplace in Options) then
  168.       ShowMessage('Cannot find "' + FindText + '".');
  169.   end;
  170. end;
  171.  
  172. procedure TForm1.FileExitClick(Sender: TObject);
  173. begin
  174.   Close;
  175. end;
  176.  
  177. procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  178. var
  179.   MsgResult: Word;
  180. begin
  181.   if Memo1.Modified then 
  182.     MsgResult := MessageDlg(Format('File %s has been modified. Save file?',
  183.     [OpenDialog1.Filename]), mtWarning, mbYesNoCancel, 0);
  184.   case MsgResult of
  185.     mrYes:
  186.       begin
  187.         Save1Click(Sender); 
  188.         CanClose := True;
  189.       end;
  190.     mrNo: CanClose := True;
  191.     mrCancel: CanClose := False;
  192.   end;
  193. end;
  194.  
  195. procedure TForm1.SpellCheck1Click(Sender: TObject);
  196. begin
  197.   SpellDlg1.CheckMemo (Memo1);
  198.   SpellDlg1.Close;
  199. end;
  200.  
  201. procedure TForm1.UpdateXY;
  202. var
  203.   XY:   TPoint;
  204.   XStr: String[4];
  205.   YStr: String[4];
  206. begin
  207.   {update the status panel on bottom}
  208.   XY := Memo_WhereXY (Memo1);
  209.   Str (XY.X:4, XStr);
  210.   Str (XY.Y:4, YStr);
  211.   Panel1.Caption := XStr + ':' + YStr;
  212. end;  { TForm1.UpdateXY }
  213.  
  214. procedure TForm1.Memo1Change(Sender: TObject);
  215. begin
  216.   UpdateXY;
  217. end;
  218.  
  219. procedure TForm1.Memo1Click(Sender: TObject);
  220. begin
  221.   UpdateXY;
  222. end;
  223.  
  224. procedure TForm1.Memo1KeyUp(Sender: TObject; var Key: Word;
  225.   Shift: TShiftState);
  226. begin
  227.   UpdateXY;
  228. end;
  229.  
  230. procedure TForm1.Memo1MouseUp(Sender: TObject; Button: TMouseButton;
  231.   Shift: TShiftState; X, Y: Integer);
  232. begin
  233.   UpdateXY;
  234. end;
  235.  
  236. end.
  237.